In large, horizontally scalable, multi-tiered server systems, system operators often need to dynamically allocate an adequate number of server machines to each tier to meet user needs. A server system, which may be part of a server farm, is a group of server machines, or computers, that work together as a single system and present the appearance of a single server to a client. The server farm may comprise many such server systems together with a server pool that provides spare server machines should one or more of the server systems require additional resources.
System operators often use trial and error to determine how many server machines to allocate to each layer or tier of the server system. Clearly, trial and error methods to determine how many server machines must be allocated to meet user demand is inefficient and often the contracting party must pay for excess capacity that it does not actually need. At other times, system level performance will degrade because too few resources are available to meet the demand.
System operators also rely on time-consuming simulations (an indirect measure) of the system's response time to determine whether the Service Level Agreement (SLA) requirements are being met. While simulating the server system for a given level of transaction requests, provides a reasonably accurate allocation scheme, simulation, is computationally expensive and lacks system-wide optimization, again making it less than ideal for quickly determining a feasible and optimal resource allocation scheme. Thus, simulation is an impractical means to allocate machines quickly and efficiently when demand changes.
Both the trial-and-error method and the simulation method require human intervention to decide whether to add (or delete) machines. Unfortunately, in a multiple tier server system there are numerous possible “places” to add or delete machines, making it impractical to achieve optimal allocation.